class Jim:
    """ this is Jim """

    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    @property
    def jim_age(self):
        return self.__age

    @jim_age.setter
    def jim_age(self, age):
        if isinstance(age, int):
            self.__age = age
        else:
            raise ValueError

    @jim_age.deleter
    def age(self):
        print("删除年龄数据！")

    def set_name(self, name):
        if isinstance(name, str):
            self.__name = name
        else:
            raise ValueError

    def get_name(self):
        return self.__name

    def del_name(self):
        print("删除name数据！")

    # property()函数的参数：
    #
    # 第一个参数是方法名，调用 实例.属性 时自动执行的方法
    # 第二个参数是方法名，调用 实例.属性 ＝ XXX时自动执行的方法
    # 第三个参数是方法名，调用 del 实例.属性 时自动执行的方法
    # 第四个参数是字符串，调用 实例.属性.__doc__时的描述信息。
    name = property(get_name, set_name, del_name, "名字")

    # 注意参数顺序,不然TypeError: set_name() missing 1 required positional argument: 'name'
    # name = property(set_name, get_name, del_name, "名字")

    # 定制__repr__方法
    # def __repr__(self):
    #     return "this is Jim object (name %s" % self.name + ",age %s)" % self.age

    # 定制__str__方法
    def __str__(self):
        return "this is Jim object (name %s" % self.name + ",age %s)" % self.age
